import {CSV} from "db://assets/scripts/common/CSV";

/**
 * CSV数据解析器
 */
export class CSVParser {
    /**
     * 禁止创建对象
     */
    private constructor() {
    }

    /**
     * 解析CSV数据
     *
     * @param text CSV数据
     */
    public static parse(text: string): string[][] {
        // 返回值
        let result: string[][] = [];

        // 当文本为空时
        if (!text || text.trim().length === 0) {
            return result;
        }

        // 按换行符分割
        let lines = text.trim().split("\n");
        // 当存在数据时
        if (lines.length) {
            // 分割表达式，可识别"1,1,1"等双引号内容
            let regExp = /,(?=(?:[^"]*"[^"]*")*[^"]*$)/;
            // 遍历行
            lines.forEach(line => {
                // 分割行数据
                let columns = line.split(regExp);
                // 将分割的数据存入结果集中
                result.push(columns);
            });
        }

        // 返回结果
        return result;
    }

    /**
     * 解析CSV数据到对象
     *
     * @param text CSV数据
     * @param headerLength 数据头长度
     */
    public static parseToCSV(text: string, headerLength: number): CSV {
        // 解析数据
        let table = this.parse(text);

        // 当解析的数据为空时
        if (!table || table.length === 0) {
            return null;
        }

        // 返回值
        let result: CSV = {
            headerLength: headerLength,
            header: [],
            datas: [],
        };

        // 遍历数据表
        table.forEach((row, index) => {
            // 头
            if (index < headerLength) {
                result.header.push(row);
                return;
            }

            // 数据
            result.datas.push(row);
        });

        // 返回结果
        return result;
    }
}